{"version":3,"file":"static/chunks/pages/create-account/start/[...pageId]-b72ec9f09c2f724d.js","mappings":"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","sources":["webpack://_N_E/?1bc4","webpack://_N_E/./src/lib/analytics/handlers/eventLogHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/klaviyoEventHandler.ts","webpack://_N_E/./src/lib/analytics/commonEmitter.ts","webpack://_N_E/./src/lib/analytics/eventEmitter.ts","webpack://_N_E/./src/lib/analytics/handlers/abstractAnalyticsHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/googleTagManagerHandler.ts","webpack://_N_E/./src/lib/dataSource/lostApi/common.ts","webpack://_N_E/./src/lib/utils/analytics/startAddPet.ts","webpack://_N_E/./src/lib/utils/analytics/startPetSearch.ts","webpack://_N_E/./src/lib/utils/helpers/dateHelpers/dates.ts","webpack://_N_E/./src/lib/utils/storage/local-storage.ts","webpack://_N_E/./src/lib/utils/helpers/ObjectsHelpers/getExpirationDate.ts","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/parseToJSONSafe.ts","webpack://_N_E/./src/lib/utils/storage/session-storage.ts","webpack://_N_E/./src/pages/create-account/start/[...pageId].tsx","webpack://_N_E/<anon>"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/create-account/start/[...pageId]\",\n function () {\n return require(\"private-next-pages/create-account/start/[...pageId].tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/create-account/start/[...pageId]\"])\n });\n }\n ","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n/**\n * EventLogHandler\n *\n * This will console log all the event data\n *\n * YOU WILL NEED TO UPDATE THE next.config.js TO ALLOW CONSOLE LOGS\n *\n * @augments AbstractAnalyticsHandler\n * @class\n */\nexport default class EventLogHandler extends AbstractAnalyticsHandler {\n /**\n * @memberof EventLogHandler\n * @param {IEvent} data - The data to be sent with the event\n */\n send(data: IEvent) {\n const analyticFeature = this.getAnalyticsFeature();\n\n /**\n * The data object to be sent to the console\n *\n * @memberof EventLogHandler\n * @member {object} dataObject\n */\n const dataObject: {\n /** The data associated with the event */\n data: object;\n /** The feature flags that are enabled */\n feature: string;\n } = {\n data: data.data,\n feature: analyticFeature,\n };\n\n console.log('EventLogHandler:', dataObject);\n }\n}\n","import getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport axios from 'axios';\nimport AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * KlaviyoEventHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class KlaviyoEventHandler extends AbstractAnalyticsHandler {\n /** @param {IEvent} data - The data to be sent with the event */\n async send(data: IEvent) {\n const eventData = {\n data: {\n type: 'event',\n attributes: {\n properties: data.data.attributes,\n time: new Date(),\n metric: {\n data: {\n type: 'metric',\n attributes: {\n name: data.name,\n },\n },\n },\n profile: {\n data: {\n type: 'profile',\n attributes: data.data.profile,\n },\n },\n },\n },\n };\n axios.post(`${getBasePath()}/api/klaviyo/events`, eventData);\n }\n}\n","import { googleTagManagerBrand } from '../constants/constants/analytics';\nimport EventEmitter from './eventEmitter';\nimport EventLogHandler from './handlers/eventLogHandler';\nimport GoogleTagManagerHandler from './handlers/googleTagManagerHandler';\nimport KlaviyoEventHandler from './handlers/klaviyoEventHandler';\n\n/** Instances of each handler class */\nconst logEventHandler = new EventLogHandler(googleTagManagerBrand);\nconst gtmEventHandler = new GoogleTagManagerHandler(googleTagManagerBrand);\nconst klaviyoEventHandler = new KlaviyoEventHandler(googleTagManagerBrand);\n\n/** Instances of each emitter */\nexport const logEventEmitter = new EventEmitter([logEventHandler]);\nexport const gtmEventEmitter = new EventEmitter([gtmEventHandler]);\n\n/** DefaultEventEmitter to contain all handlers */\nexport const defaultEventEmitter = new EventEmitter([\n logEventHandler,\n gtmEventHandler,\n]);\n\n/** KlaviyoEventEmitter to contain Klaviyo related handlers */\nexport const klaviyoEventEmitter = new EventEmitter([\n logEventHandler,\n klaviyoEventHandler,\n]);\n","import AbstractAnalyticsHandler, {\n IEvent,\n} from './handlers/abstractAnalyticsHandler';\n\n/**\n * EventEmitter\n *\n * This will be used to dispatch each event to the appropriate handler\n *\n * @class\n */\nexport default class EventEmitter {\n /**\n * The handlers to be used for each event\n *\n * @memberof EventEmitter\n * @member {AbstractAnalyticsHandler[]} handlers\n */\n private handlers: AbstractAnalyticsHandler[];\n\n /** @param {AbstractAnalyticsHandler[]} handlers - Instances of handlerClasses */\n constructor(handlers: AbstractAnalyticsHandler[]) {\n this.handlers = handlers;\n }\n\n /**\n * The event handler\n *\n * @param {IEvent} data - Information about the event\n */\n handleEvent(data: IEvent) {\n this.handlers.forEach((handler) => {\n handler.send(data);\n });\n }\n}\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { analyticsFeatureKey } from '@/lib/utils/featureFlags/optimizely/featureFlagOverride';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\n\n/** @typedef validTypes - Valid types for event data */\ntype ValidTypes = string | number | boolean | object | null | undefined;\n\n/** @typedef eventData - How to pass the data within the event */\ntype EventData = { [key: string]: ValidTypes };\n\n/**\n * Describes the base event structure\n *\n * @interface IEvent\n */\nexport interface IEvent {\n /**\n * The name of the event\n *\n * @memberof IEvent\n * @member {string} name\n */\n name: string;\n /**\n * The data associated with the event\n *\n * @memberof IEvent\n * @member {EventData} data - The data associated with the event\n */\n data: EventData;\n}\n\n/**\n * Provides an abstract class for analytics handlers\n *\n * @abstract\n * @class\n * @name analyticsHandler\n */\nexport default abstract class AbstractAnalyticsHandler {\n /**\n * The source platform of the event data\n *\n * @memberof AbstractAnalyticsHandler\n * @member {string} brand\n */\n brand: string;\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @param {string} brand - The source platform of the event data\n */\n constructor(brand: string) {\n this.brand = brand;\n }\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @returns {string} - The analytic feature that is enabled\n * @protected\n */\n protected getAnalyticsFeature(): string {\n const cookies = new CookieStorage();\n const optimizelyDecision = cookies.get(analyticsFeatureKey) as {\n /** The analytic feature that is enabled */\n analytic: string;\n };\n let feature: string = notApplicableString;\n if (optimizelyDecision && optimizelyDecision.analytic) {\n // Split the string into an array\n feature = optimizelyDecision.analytic;\n }\n return feature;\n }\n\n /**\n * @memberof AbstractAnalyticsHandler\n * @abstract\n * @param {IEvent} data - The data to be sent with the event\n */\n abstract send(data: IEvent): void;\n}\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * GoogleTagManagerHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class GoogleTagManagerHandler extends AbstractAnalyticsHandler {\n /** @param {IEvent} data - The data to be sent with the event */\n send(data: IEvent) {\n const feature = this.getAnalyticsFeature();\n /** The data object to be sent to Google Tag Manager */\n const dataObject: { [key: string]: string | string[] } = {\n brand: this.brand,\n ...data.data,\n feature,\n };\n gtag('event', data.name, dataObject);\n }\n}\n","import { PetcoLoveSDK } from '@petcolove/lost--client--api-sdk';\n\n/**\n * Initialize the SDK\n *\n * @returns {PetcoLoveSDK} The SDK instance\n */\nexport function initSDK(): PetcoLoveSDK {\n /**\n * The PLL API base URL\n *\n * @constant {string | undefined} pllApiBaseUrl\n */\n const pllApiBaseUrl =\n process.env.NEXT_PUBLIC_PLL_API_BASE_URL ??\n process.env.STORYBOOK_PLL_API_BASE_URL;\n /**\n * The PLL Websocket base URL\n *\n * @constant {string | undefined} pllWebsocketBaseUrl\n */\n const pllWebsocketBaseUrl =\n process.env.NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL ??\n process.env.STORYBOOK_PLL_WEBSOCKET_BASE_URL;\n\n if (!pllApiBaseUrl) {\n throw new Error('NEXT_PUBLIC_PLL_API_BASE_URL is not defined');\n }\n\n if (!pllWebsocketBaseUrl) {\n throw new Error('NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL is not defined');\n }\n\n const sdk = new PetcoLoveSDK(pllApiBaseUrl, pllWebsocketBaseUrl);\n\n return sdk;\n}\n\nexport const sdk: PetcoLoveSDK = initSDK();\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { PetStatus } from '@/lib/constants/types/analytics';\nimport { InferredSpecies } from '@/lib/constants/types/pets';\n\n/**\n * Start Add Pet Event Handler Data\n *\n * @interface IStartAddPetEventData\n */\nexport interface IStartAddPetEventData {\n /** Click Text */\n clickText: string;\n /** Where the add pet was initiated */\n context: 'Dashboard' | 'Sign Up Flow';\n /** Pet Status */\n petStatus?: PetStatus;\n /** What type of user is creating the pet */\n listingSource: 'Consumer Pet Listing' | 'Shelter Pet Listing';\n /** Pet Species */\n species?: InferredSpecies;\n}\n\n/**\n * Send the start add pet event to google analytics\n *\n * @param {IStartAddPetEventData} data - The data to send\n */\nexport const startAddPetEventHandler = ({\n clickText,\n context,\n petStatus,\n listingSource,\n species,\n}: IStartAddPetEventData) => {\n const eventData = {\n name: 'start_add_pet',\n data: {\n click_text: clickText,\n context,\n items: [\n {\n pet_id: notApplicableString,\n pet_name: notApplicableString,\n pet_status: petStatus || notApplicableString,\n listing_source: listingSource,\n species: species || notApplicableString,\n location_id: notApplicableString,\n },\n ],\n },\n };\n defaultEventEmitter.handleEvent(eventData);\n};\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { IEvent } from '@/lib/analytics/handlers/abstractAnalyticsHandler';\nimport { AnalyticsInitiatingComponent } from '@/lib/storageClasses/analyticsEventStorage';\n\n/**\n * The flow type\n *\n * @type {Flow}\n */\ntype Flow = 'Lost' | 'Found' | 'All';\n\n/**\n * The event name\n *\n * @constant {string}\n */\nconst eventName = 'start_pet_search';\n\n/**\n * The interface for the user sign up event\n *\n * @interface IUserSignUpEvent\n */\nexport interface IStartPetSearchEvent {\n /** The clicked text */\n clickText: string;\n /** The search flow */\n flow: Flow;\n /** The component used to start event */\n component: AnalyticsInitiatingComponent;\n}\n\n/**\n * Handle the user sign up event\n *\n * @param {IStartPetSearchEvent} params - The event params\n */\nexport const startPetSearchEventHandler = ({\n clickText,\n flow,\n component,\n}: IStartPetSearchEvent) => {\n const eventData: IEvent = {\n name: eventName,\n data: {\n click_text: clickText,\n flow_type: flow,\n component,\n },\n };\n defaultEventEmitter.handleEvent(eventData);\n};\n","// Today's date\nexport const today = new Date();\n// Tomorrow's Date\nexport const tomorrow = new Date(today.getTime() + 86400000);\n\n/**\n * Get a date object that is X minutes from now\n *\n * @param {number} minutes - Time in minutes\n * @returns {Date} A date object that is X minutes from now\n */\nexport const getDateXMinutesFromNow = (minutes: number) => {\n return new Date(new Date().getTime() + minutes * 60 * 1000);\n};\n\n/**\n * Check if a date is valid\n *\n * @param {string} date - The date to check\n * @returns {boolean} - True if the date is valid, false otherwise\n */\nexport const isDateValid = (date: string) => {\n return !isNaN(new Date(date).getTime());\n};\n","import AbstractStorage, { IStorageConfig } from './abstract-storage';\n\n/**\n * LocalStorage Local Storage is available across all browser tabs. It is not\n * cleared when the tab is closed.\n *\n * @augments AbstractStorage\n * @class\n */\nexport default class LocalStorage extends AbstractStorage {\n /**\n * Get Get the data from the local storage.\n *\n * @param {string} id - The id of the data to get.\n * @returns {object | null} - The data or null if not found.\n */\n get(id: string): object | string | null {\n if (typeof window === 'undefined') {\n return null;\n }\n const data = localStorage.getItem(id);\n\n if (!data) return null;\n // Parse the data and check if the expiration date is passed\n let parsedData = null;\n\n parsedData = JSON.parse(data);\n if (parsedData.expiration && new Date(parsedData.expiration) < new Date()) {\n this.delete(id);\n return null;\n }\n return parsedData;\n }\n\n /**\n * Set Set the data in the local storage.\n *\n * @param {string} id - The id of the data to set.\n * @param {object | string} data - The data to set.\n * @param {IStorageConfig} [config] - The configuration for the local storage.\n */\n set(id: string, data: object | string, config?: IStorageConfig): void {\n if (config?.expires) {\n if (typeof data === 'string') {\n data = { data, expiration: config.expires };\n } else {\n data = { ...data, expiration: config.expires };\n }\n }\n localStorage.setItem(id, JSON.stringify(data));\n }\n\n /**\n * Delete Delete the data from the local storage.\n *\n * @param {string} id - The id of the data to delete.\n */\n delete(id: string): void {\n localStorage.removeItem(id);\n }\n}\n","/**\n * Get the expiration date from the data.\n *\n * @param {object | null} data - The data.\n * @returns {Date | null} - The expiration date or null if not found.\n */\nfunction getExpirationDate(\n data: { [key: string]: unknown } | null\n): Date | null {\n if (\n data !== null &&\n 'expiration' in data &&\n data?.expiration &&\n typeof data.expiration === 'string'\n ) {\n /**\n * The expiration date from the data.\n *\n * @constant {Date} expirationDate\n */\n const expirationDate = new Date(data.expiration);\n\n if (!isNaN(expirationDate.getTime())) {\n return expirationDate;\n }\n console.error('Invalid expiration date: ', data.expiration);\n }\n\n return null;\n}\n\nexport default getExpirationDate;\n","/**\n * A helper function to parse a JSON string safely\n *\n * @param {string} str - The string to parse\n * @returns {string | object} - The parsed JSON object or the string\n */\nfunction parseToJSONSafe(str: string): string | { [key: string]: unknown } {\n try {\n return JSON.parse(str);\n } catch (error) {\n console.error('Unable to parse string to JSON: ', str);\n }\n return str;\n}\n\nexport default parseToJSONSafe;\n","import getExpirationDate from '../helpers/ObjectsHelpers/getExpirationDate';\nimport parseToJSONSafe from '../helpers/stringHelpers/parseToJSONSafe';\nimport AbstractStorage, { IStorageConfig } from './abstract-storage';\n\n/**\n * SessionStorage Session Storage is a storage that is available only in the\n * current browser tab. It is cleared when the tab is closed. It is not shared\n * between tabs.\n *\n * @augments AbstractStorage\n * @class\n */\nexport default class SessionStorage extends AbstractStorage {\n /**\n * Whether the session storage is available.\n *\n * @returns {boolean} - Whether the session storage is available.\n */\n private isAvailable(): boolean {\n return typeof window !== 'undefined';\n }\n\n /**\n * Get Get the data from the session storage.\n *\n * @param {string} id - The id of the data to get.\n * @returns {object | null} - The data or null if not found.\n */\n get(id: string): object | string | null {\n if (!this.isAvailable()) {\n return null;\n }\n const data = sessionStorage.getItem(id);\n\n if (!data) {\n return null;\n }\n\n // Parse the data and check if the expiration date is passed\n const parsedData = parseToJSONSafe(data);\n\n if (typeof parsedData === 'string') {\n return parsedData;\n }\n /**\n * The data expiration date.\n *\n * @constant {Date | null} expirationDate\n */\n const expirationDate = getExpirationDate(parsedData);\n\n if (expirationDate && expirationDate < new Date()) {\n this.delete(id);\n return null;\n }\n return parsedData;\n }\n\n /**\n * Set Set the data in the session storage.\n *\n * @param {string} id - The id of the data to set.\n * @param {object | string} data - The data to set.\n * @param {IStorageConfig} [config] - The session configuration.\n */\n set(id: string, data: object | string, config?: IStorageConfig): void {\n if (!this.isAvailable()) {\n return;\n }\n if (config?.expires) {\n if (typeof data === 'string') {\n data = { data, expiration: config.expires };\n } else {\n data = { ...data, expiration: config.expires };\n }\n }\n sessionStorage.setItem(id, JSON.stringify(data));\n }\n\n /**\n * Delete Delete the data from the session storage.\n *\n * @param {string} id - The id of the data to delete.\n */\n delete(id: string): void {\n sessionStorage.removeItem(id);\n }\n}\n","import Head from '@/components/templates/Head/Head';\nimport StepperFormTemplate, {\n defaultSubmitLabel,\n} from '@/components/templates/StepperFormTemplate/StepperFormTemplate';\nimport { getIdTokenSSR } from '@/lib/dataSource/auth/getIdToken';\nimport getMe from '@/lib/dataSource/lostApi/auth/me';\nimport { MultiPageFormProvider } from '@/lib/hooks/multiPageForm/MultiPageForm';\nimport {\n FormTypes,\n PageTypes,\n} from '@/lib/hooks/multiPageForm/configs/Configuration';\nimport { ICreateAccountStartFormData as IFormData } from '@/lib/hooks/multiPageForm/configs/CreateAccountStart';\nimport {\n IStartAddPetEventData,\n startAddPetEventHandler,\n} from '@/lib/utils/analytics/startAddPet';\nimport { startPetSearchEventHandler } from '@/lib/utils/analytics/startPetSearch';\nimport { GetServerSideProps, GetServerSidePropsContext, NextPage } from 'next';\nimport { useRouter } from 'next/router';\nimport { useEffect, useState } from 'react';\n\n/**\n * The form Id is used to identify the form in the MultiPageFormProvider.\n *\n * @constant\n * @type {FormTypes}\n */\nexport const formId: FormTypes = 'create-account/start';\n\n/**\n * ICreateAccountStartForm Create Account Start Form Interface\n *\n * @interface\n */\ninterface ICreateAccountStartForm {\n /** The page Id */\n pageId: PageTypes;\n}\n\n/**\n * Create Account Start Page\n *\n * @param {ICreateAccountStartForm} props - The props\n * @returns {NextPage<ICreateAccountStartForm>} - The I Lost a Pet Form Page\n */\nconst CreateAccountStartForm: NextPage<ICreateAccountStartForm> = ({\n pageId,\n}: ICreateAccountStartForm) => {\n const router = useRouter();\n const [loading, setLoading] = useState(false);\n\n /** Send the start add pet event data on mount */\n useEffect(() => {\n const data: IStartAddPetEventData = {\n clickText: 'Sign Up',\n context: 'Sign Up Flow',\n listingSource: 'Consumer Pet Listing',\n };\n /** Send the start add pet event to google analytics */\n startAddPetEventHandler(data);\n }, []);\n\n /**\n * On Submit\n *\n * @param {object} data - The data from the form\n * @returns {void}\n */\n const onSubmit = async (data: IFormData) => {\n setLoading(true);\n const initiatingComponent = 'Sign Up Button / All Pages';\n\n switch (data.typeOfPet) {\n case 'found':\n /** Send the start pet search to google analytics */\n startPetSearchEventHandler({\n clickText: defaultSubmitLabel,\n component: initiatingComponent,\n flow: 'Lost',\n });\n router.push('/create-account/found');\n break;\n case 'lost':\n /** Send the start pet search to google analytics */\n startPetSearchEventHandler({\n clickText: defaultSubmitLabel,\n component: initiatingComponent,\n flow: 'Found',\n });\n router.push('/create-account/lost');\n break;\n default:\n router.push('/create-account/safe');\n break;\n }\n };\n\n return (\n <MultiPageFormProvider formId={formId} pageId={pageId}>\n <Head title=\"Create An Account\" noIndex={true} />\n <StepperFormTemplate\n key={pageId}\n loading={loading}\n submitFunction={onSubmit}\n submitButtonDisabled={loading}\n />\n </MultiPageFormProvider>\n );\n};\n\nexport default CreateAccountStartForm;\n\n/**\n * Get Server Side Props This function is used to populate the form found in the\n * context params of the url path.\n *\n * @param {object} context - The context of the page\n */\nexport const getServerSideProps: GetServerSideProps = async (\n context: GetServerSidePropsContext\n) => {\n const idToken = await getIdTokenSSR(context.req, context.res);\n // This page is only accessible if the user is not logged in\n if (idToken) {\n const user = await getMe(idToken);\n const userId = user.user.id;\n if (userId) {\n return {\n redirect: {\n destination: '/dash',\n permanent: false,\n },\n };\n }\n }\n\n const pageId = context.params?.pageId as PageTypes;\n const page = pageId[0];\n return {\n props: {\n pageId: page,\n },\n };\n};\n"],"names":["window","__NEXT_P","push","__webpack_require__","EventLogHandler","AbstractAnalyticsHandler","send","data","getAnalyticsFeature","KlaviyoEventHandler","eventData","type","attributes","properties","time","Date","metric","name","profile","axios","concat","getBasePath","logEventHandler","googleTagManagerBrand","gtmEventHandler","GoogleTagManagerHandler","klaviyoEventHandler","EventEmitter","defaultEventEmitter","handleEvent","handlers","forEach","handler","constructor","cookies","CookieStorage","optimizelyDecision","get","analyticsFeatureKey","feature","notApplicableString","analytic","brand","dataObject","gtag","sdk","initSDK","pllApiBaseUrl","process","pllWebsocketBaseUrl","PetcoLoveSDK","startAddPetEventHandler","clickText","context","petStatus","listingSource","species","param","click_text","items","pet_id","pet_name","pet_status","listing_source","location_id","startPetSearchEventHandler","flow","component","flow_type","today","tomorrow","getTime","getDateXMinutesFromNow","minutes","isDateValid","isNaN","date","LocalStorage","AbstractStorage","id","localStorage","getItem","parsedData","JSON","parse","expiration","delete","set","config","expires","setItem","stringify","removeItem","ObjectsHelpers_getExpirationDate","expirationDate","stringHelpers_parseToJSONSafe","str","error","SessionStorage","isAvailable","sessionStorage","parseToJSONSafe","getExpirationDate","formId","__webpack_exports__","pageId","router","useRouter","loading","setLoading","useState","useEffect","onSubmit","initiatingComponent","typeOfPet","defaultSubmitLabel","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","MultiPageFormProvider","jsx","Head","title","noIndex","StepperFormTemplate","submitFunction","submitButtonDisabled"],"sourceRoot":""}